﻿using Autodesk.AutoCAD.Internal;

namespace DYH.Extensions.CAD.Tools.Cad;

/// <summary>
/// 进度条管理器
/// </summary>
public sealed class ProgressMeterManager : IDisposable
{
    /// <summary>
    /// 启动一个新的进度条管理器实例。
    /// </summary>
    /// <param name="message">显示在状态栏上的进度条消息。</param>
    /// <param name="count">进度条的总步数。</param>
    /// <returns>返回一个初始化后的 ProgressMeterManager 实例。</returns>
    public static ProgressMeterManager Start(string message, int count)
    {
        return new ProgressMeterManager(message, count);
    }

    private int _current;

    /// <summary>
    /// 初始化 ProgressMeterManager 类的新实例。
    /// </summary>
    /// <param name="message">显示在状态栏上的进度条消息。</param>
    /// <param name="count">进度条的总步数。</param>
    private ProgressMeterManager(string message, int count)
    {
        // 设置应用程序状态栏的进度条，初始化为 0 步。
        Utils.SetApplicationStatusBarProgressMeter(message, 0, count);
    }

    /// <summary>
    /// 将进度条向前推进一步。
    /// </summary>
    public void Step(int? index = null)
    {
        if (index.HasValue)
        {
            _current = index.Value;
        }

        // 更新进度条的当前步数。
        Utils.SetApplicationStatusBarProgressMeter(_current++);
    }

    /// <summary>
    /// 获取一个值，指示当前对象是否已被释放。
    /// </summary>
    public bool IsDisposed { get; private set; }

    /// <summary>
    /// 释放 ProgressMeterManager 使用的资源，并恢复应用程序状态栏。
    /// </summary>
    public void Dispose()
    {
        // 如果对象已被释放，则直接返回。
        if (IsDisposed)
            return;

        // 恢复应用程序状态栏到初始状态。
        Utils.RestoreApplicationStatusBar();
        IsDisposed = true;
    }
}